﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace SistemaAdministracion.Models.BaseClass
{
    public class ContextBase : DbContext
    {
        /*
         * Clase contexto de coneccion a la base de datos
         * esta basado en el patron de diseño singleton
         * ya que el motor de base de datos genera una excepcion cuando se crean multiples conexiones
         * por ende se opto por este patron para obtener una unica instancia y usarla a nivel global
         */

        private const string conection = "ConnectPostgres";

        private enum Schemas
        {
            cuentas,
            personal,
            empresa,
            sistema,
            remuneracion,
            contrato,
            generico
        }

        private static readonly ContextBase ContextInstance = new ContextBase(conection);

        public static ContextBase ContextBaseInstance
        {
            get
            {
                return ContextInstance;
            }
        }

        private ContextBase(string Connection) : base (Connection) { }

        /*
         * Con Este Metodo Hacemos Referencia de que cada una de las clases estan representadas por una tabla y su respectivo esquema
         *
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {



            modelBuilder.Entity<Persona>().ToTable("persona", Schemas.generico.ToString());
            modelBuilder.Entity<Telefono>().ToTable("telefono", Schemas.generico.ToString());
            modelBuilder.Entity<Direccion>().ToTable("direccion", Schemas.generico.ToString());
            modelBuilder.Entity<Institucion>().ToTable("intitucion", Schemas.generico.ToString());
            modelBuilder.Entity<PeriodoContable>().ToTable("periodocontable", Schemas.generico.ToString());
            modelBuilder.Entity<ImpuestoRenta>().ToTable("impuestorenta", Schemas.generico.ToString());
            modelBuilder.Entity<IndicadorEconomico>().ToTable("indicadoreconomico", Schemas.generico.ToString());
            modelBuilder.Entity<SeguroCensantia>().ToTable("segurocesantia", Schemas.generico.ToString());
            modelBuilder.Entity<AsignacionFamiliar>().ToTable("asignacionfamiliar", Schemas.generico.ToString());
            modelBuilder.Entity<ParametroSistema>().ToTable("parametroisistema", Schemas.generico.ToString());
            modelBuilder.Entity<Aviso>().ToTable("aviso", Schemas.generico.ToString());
            modelBuilder.Entity<Tipo>().ToTable("tipo", Schemas.generico.ToString());
            modelBuilder.Entity<Parametro>().ToTable("parametro", Schemas.generico.ToString());

   

            modelBuilder.Entity<Usuario>().ToTable("usuario", Schemas.cuentas.ToString());
            modelBuilder.Entity<Role>().ToTable("role", Schemas.cuentas.ToString());
            modelBuilder.Entity<UsuarioRol>().ToTable("userrole", Schemas.cuentas.ToString());

            

            modelBuilder.Entity<LogProceso>().ToTable("logproceso", Schemas.sistema.ToString());
            modelBuilder.Entity<Evento>().ToTable("evento", Schemas.sistema.ToString());
            modelBuilder.Entity<Entidad>().ToTable("entidad", Schemas.sistema.ToString());

           

            modelBuilder.Entity<Liquidacion>().ToTable("liquidacion", Schemas.remuneracion.ToString());
            modelBuilder.Entity<DetalleLiquidacion>().ToTable("detallefiniquito", Schemas.remuneracion.ToString());
            modelBuilder.Entity<ItemLiquidacion>().ToTable("itemliquidacion", Schemas.remuneracion.ToString());

            

            modelBuilder.Entity<VigContrato>().ToTable("vigcontrato", Schemas.contrato.ToString());
            modelBuilder.Entity<Finiquito>().ToTable("finiquito", Schemas.contrato.ToString());
            modelBuilder.Entity<DetalleFiniquito>().ToTable("detallefiniquito", Schemas.contrato.ToString());

            

            modelBuilder.Entity<FichaEmpleado>().ToTable("fichaempleado", Schemas.personal.ToString());
            modelBuilder.Entity<CargaFamiliar>().ToTable("cargafamiliar", Schemas.personal.ToString());
            modelBuilder.Entity<TelefonoEmpleado>().ToTable("telefonoempleado", Schemas.personal.ToString());
            modelBuilder.Entity<DireccionEmpleado>().ToTable("direccionempleado", Schemas.personal.ToString());
            modelBuilder.Entity<AFP>().ToTable("afp", Schemas.personal.ToString());
            modelBuilder.Entity<InsSalud>().ToTable("inssalud", Schemas.personal.ToString());

            

            modelBuilder.Entity<Empresa>().ToTable("empresa", Schemas.empresa.ToString());
            modelBuilder.Entity<TelefonoEmpresa>().ToTable("telefonoempresa", Schemas.empresa.ToString());
            modelBuilder.Entity<DireccionEmpresa>().ToTable("direccionempresa", Schemas.empresa.ToString());
            modelBuilder.Entity<CentroCosto>().ToTable("centrocosto", Schemas.empresa.ToString());
            modelBuilder.Entity<RepLegal>().ToTable("replegal", Schemas.empresa.ToString());
            modelBuilder.Entity<CajaCompensacion>().ToTable("cajacompensacion", Schemas.empresa.ToString());
            modelBuilder.Entity<Mutual>().ToTable("mutual", Schemas.empresa.ToString());

            
        }*/


    }
}